/*
回形取数就是沿矩阵的边取数，若当前方向上无数可取或已经取过，则左转90度。一开始位于矩阵左上角，方向向下

样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5

样例输入
3 2
1 2
3 4
5 6
样例输出
1 3 5 6 4 2
*/

#include<bits/stdc++.h>
using namespace std; 
int main(){
	int m,n;
	cin>>m>>n; 
	int temp;
	vector<vector<int> > res(m,vector<int>(n,0));
    for(int i=0;i<m;i++){
    	for(int j=0;j<n;j++){
    		cin>>temp;
    		res[i][j]=temp;
		}
	}
	vector<int> ans;
	int u=0;
	int d=m-1;
	int l=0;
	int r=n-1;
	while(true){
		for(int i=u;i<=d;i++) ans.push_back(res[i][l]);
		if(++l>r) break;
		for(int i=l;i<=r;i++) ans.push_back(res[d][i]);
		if(--d<u) break;
		for(int i=d;i>=u;i--) ans.push_back(res[i][r]);
		if(--r<l) break;
		for(int i=r;i>=l;i--) ans.push_back(res[u][i]);
		if(++u>d) break; 
	}
	for(int k=0;k<ans.size();k++)
		cout<<ans[k]<<" ";
}
